\chapter{Choix des outils de r\'ealisation}
\label{chap:choix.outils}
\minitoc

\section{Une technologie : Flex}
La console web de monitoring/administration de JASMINe est int\'egralement d\'evelopp\'ee en Flex. 
Flex est une solution de d\'eveloppement d'applications 
Internet riches (RIA) support\'ee par Adobe. Les applications Flex sont des applications Flash (swf) \'ecrites en MXML (repose sur XML) et en 
ActionScript, qui sont lues gr\^ace au Flash Player. Les raisons qui ont pouss\'e l'\'equipe JOnAS/JASMINe a choisir cette technologie sont multiples :

\begin{description}
\item[Un client ni l\'eger ni lourd - ] 

Flex repr\'esente un bon compromis entre des applications l\'eg\'eres (par exemple en Struts) et des clients 
lourds comme les applications bas\'ees sur Eclipse GEF (Graphical Editing Framework).

\item[Des applications riches - ] 

Flex offre des possibilit\'es avanc\'ees et s'av\'ere \^etre un excellent compromis entre l\'eg\`eret\'e et fonctionnalit\'es.

\item[Un framework open source - ] 
M\^eme si le lecteur reste propri\'etaire, le framework de d\'eveloppement Flex est et restera open source.

\item[Universalit\'e et portabilit\'e - ] 

Le lecteur Flash est tr\`es r\'epandu et install\'e sur la plupart des machines. Il est facilement utilisable.

\end{description}

En r\'esum\'e, les possibilit\'es de Flex et ses perspectives d'avenir en font un choix p\'erenne pour la r\'ealisation 
d'application riches et l\'eg\`eres en m\^eme temps.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Un framework : Cairngorm}
Chaque entit\'e de la console est \'ecrite en suivant le framework Cairngorm. 
Plut\^ot qu'un framework, Cairngorm est en fait une micro-architecture open-source d\'evelopp\'ee par Adobe : 
une collaboration des patterns de programmation pour Flex les plus reconnus. 
Un projet Cairngorm se structure en couches de la mani\`ere suivante :

\begin{description}
\item[business - ]
point d'acc\'es vers le serveur.

\item[commande - ]
ex\'ecute des commandes en les d\'el\'eguant \`a la couche business et met \`a jour le mod\`ele en retour.

\item[mod\`ele - ]
le mod\`ele de l'application.

\item[ValueObject - ] 
objets manipul\'es par l'application, Flex fournissant un m\'ecanisme entre les classes serveur (Java) et ces ValueObjects.

\item[\'ev\`enements - ]
les formats d'\'ev\`enements internes \`a l'application, transportant par exemple des ordres de commandes.

\item[contr\^ole - ]
couche associant les types d'\'ev\`enement \`a des commandes.

\item[vue - ]
couche graphique, propageant des \'ev\`enements vers le contr\^ole.

\end{description}

La vue fournit la visualisation des donn\'ees du mod\`ele. Lorsque l'utilisateur interagit avec, par exemple en cliquant sur un bouton, un \'ev\`enement 
est propag\'e, contenant les informations correspondantes. Le contr\^oleur associe cet \'ev\`enement \`a une commande. La commande repose sur un 
d\'el\'egu\'e 
pour lancer un appel vers le serveur. Ceci permet de changer la partie serveur sans avoir \`a modifier les commandes.
Cette commande g\'ere ensuite le r\'esultat re\c{c}u et met \`a jour le mod\`ele en
cons\'equence. La boucle est boucl\'ee !

Cette structure a de multiples avantages, elle permet en particulier d'assurer la coh\'erence \`a tout instant du mod\`ele et de g\'erer simplement la 
synchronisation de l'\'etat entre le client et le serveur.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Des communications client-serveur avec GraniteDS}

Apr\`es l'interface client, le second besoin est de relier le monde de Flex \`a celui de Java et donc d'avoir un 
m\'ecanisme de communication entre le client et le serveur. 
Pour cela, on utilise GraniteDS qui est une impl\'ementation gratuite et open source alternative \`a LiveCycle, le syst\`eme de 
service de donn\'ees pour les serveurs d'application Java EE d'Adobe. 
En pleine \'evolution, GraniteDS permet la communication entre plusieurs 
frameworks c\^ot\'e client et serveur.

Dans la figure \ref{fig:notif.cairngorm} on peut observer le fonctionnement du Cairngorm,
appliqu\'e au module Notification Board.

\begin{landscape}
 \begin{figure}
   \includegraphics[width=1.2\textwidth]{Choix_outils/notif_cairngorm}
   \caption{\label{fig:notif.cairngorm} Mod\`ele d'utilisation de Cairngorm}
\end{figure}
\end{landscape}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%end Choix_outils.tex